package com.ternnetwork.configuration.service.impl.system;


import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import com.ternnetwork.commons.model.http.BaseResponse;
import com.ternnetwork.configuration.dao.system.SystemParameterDao;
import com.ternnetwork.configuration.entity.system.SystemParameter;
import com.ternnetwork.configuration.service.system.SystemParameterService;
import com.ternnetwork.persistence.page.BootstrapGrid;
import com.ternnetwork.persistence.page.Page;









@Service("systemParameterService")
public class SystemParameterServiceImpl implements SystemParameterService {
	
	
	@Resource
	public SystemParameterDao systemParameterDao;
	
	@Override
	public BaseResponse idoAdd(SystemParameter t) {
		
		BaseResponse res=new BaseResponse();
		
		if(StringUtils.isEmpty(t.getName())){
			res.setStatus(0);
			res.setMessage("操作失败，名称不能为空！");
			return res;
		}
		if(StringUtils.isEmpty(t.getParamKey())){
			res.setStatus(0);
			res.setMessage("操作失败，键不能为空！");
			return res;
		}
		if(StringUtils.isEmpty(t.getParamValue())){
			res.setStatus(0);
			res.setMessage("操作失败，值不能为空！");
			return res;
		}
		if(StringUtils.isEmpty(t.getCategory())){
			res.setStatus(0);
			res.setMessage("操作失败，分类不能为空！");
			return res;
		}
		
		long totalCount=systemParameterDao.getTotalCount("select count(id) from SystemParameter where paramKey=?1", t.getParamKey());

		if(totalCount>0L){
			res.setStatus(0);
			res.setMessage("操作失败，键已在系统中存在！");
			return res;
		}
		t.setParamKey(t.getParamKey().toUpperCase());
		systemParameterDao.persist(t);
		res.setStatus(1);
		res.setMessage("操作成功！");
		return res;
	}
	@Override
	public BaseResponse idoUpdate(SystemParameter t) {
        
		BaseResponse res=new BaseResponse();
		
		if(StringUtils.isEmpty(t.getName())){
			res.setStatus(0);
			res.setMessage("操作失败，名称不能为空！");
			return res;
		}
		if(StringUtils.isEmpty(t.getParamKey())){
			res.setStatus(0);
			res.setMessage("操作失败，键不能为空！");
			return res;
		}
		if(StringUtils.isEmpty(t.getParamValue())){
			res.setStatus(0);
			res.setMessage("操作失败，值不能为空！");
			return res;
		}
		if(StringUtils.isEmpty(t.getCategory())){
			res.setStatus(0);
			res.setMessage("操作失败，分类不能为空！");
			return res;
		}
		
		long totalCount=systemParameterDao.getTotalCount("select count(id) from SystemParameter where paramKey=?1 and id!=?2", t.getParamKey(),t.getId());

		if(totalCount>0L){
			res.setStatus(0);
			res.setMessage("操作失败，键已在系统中存在！");
			return res;
		}
		t.setParamKey(t.getParamKey().toUpperCase());
		systemParameterDao.saveOrUpdate(t);
		res.setStatus(1);
		res.setMessage("操作成功！");
		return res;
	}

	
	@Override
	public BaseResponse idoDeleteById(long id) {
		BaseResponse res=new BaseResponse();
		SystemParameter t=systemParameterDao.findById(SystemParameter.class, id);
		if(t==null){
			res.setStatus(0);
			res.setMessage("操作失败，键已在系统中存在！");
			return res;
			
		}
		systemParameterDao.delete(t);
		res.setStatus(1);
		res.setMessage("操作成功！");
		return res;
	}
	@Override
	public Page<SystemParameter> find(String countJpql,String jpql, Page page, Object... param) {
		return systemParameterDao.query(countJpql, jpql, page, param);
	}
	@Override
	public List<SystemParameter> findAll(String jpql, Object... param) {
		return systemParameterDao.findAll(jpql, param);
	}
	@Override
	public SystemParameter findById(String id) {
		return systemParameterDao.findById(SystemParameter.class, id);
	}
	@Override
	public SystemParameter getReferenceById(String id) {
		return systemParameterDao.getReferenceById(SystemParameter.class, id);
	}
	@Override
	public Long getTotalCount(String countJpql, Object... param) {
		return systemParameterDao.getTotalCount(countJpql, param);
	}
	@Override
	public String getValueByKey(String key){
		
		String jpql="from SystemParameter t where t.paramKey=?1";
		List<Object> params=new ArrayList<Object>();
		params.add(key);
		List<SystemParameter> list=systemParameterDao.findAll(jpql, params);
		if(list.size()>0){
			String value=list.get(0).getParamValue();
		
			return value;
		}
		return "";
	}
	
	public Page<SystemParameter> query(SystemParameter t,Page page) {
		
		StringBuffer jpql=new StringBuffer("from SystemParameter t where 1=1");
		
		List<Object> params=new ArrayList<Object>();

		if(StringUtils.isNotEmpty(t.getName())){
			params.add(t.getName().toUpperCase()+"%");
			jpql.append(" and t.name like?"+params.size());
		}
		if(StringUtils.isNotEmpty(t.getParamKey())){
			params.add(t.getParamKey());
			jpql.append(" and t.paramKey=?"+params.size());
		}
		if(StringUtils.isNotEmpty(t.getCategory())){
			params.add(t.getCategory());
			jpql.append(" and t.category=?"+params.size());
		}
		return systemParameterDao.query("select count(t.id) "+jpql.toString(),jpql.toString(), page, params.toArray());
	}
	@Override
	public String queryToJsonStr(SystemParameter t,Page page) {
		Page<SystemParameter> result=query(t, page);
		BootstrapGrid grid=new BootstrapGrid(result);
		return grid.toString();
	}
	
	
}
